package com.yunke.common.util;

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Random;
import java.util.UUID;

/**
 * ID生成工具类
 * 
 * @author yunke
 * @since 1.0.0
 */
public class YunkeIdUtils {

    private static final Random RANDOM = new Random();
    private static final DateTimeFormatter DATE_TIME_FORMATTER = DateTimeFormatter.ofPattern("yyyyMMddHHmmss");

    /**
     * 生成UUID（去除连字符）
     * 
     * @return 32位UUID字符串
     */
    public static String generateUUID() {
        return UUID.randomUUID().toString().replace("-", "");
    }

    /**
     * 生成订单号
     * 格式：yyyyMMddHHmmss + 6位随机数
     * 
     * @return 订单号
     */
    public static String generateOrderNo() {
        String timestamp = LocalDateTime.now().format(DATE_TIME_FORMATTER);
        String randomSuffix = String.format("%06d", RANDOM.nextInt(1000000));
        return timestamp + randomSuffix;
    }

    /**
     * 生成支付单号
     * 格式：PAY + yyyyMMddHHmmss + 6位随机数
     * 
     * @return 支付单号
     */
    public static String generatePaymentNo() {
        return "PAY" + generateOrderNo();
    }

    /**
     * 生成退款单号
     * 格式：REF + yyyyMMddHHmmss + 6位随机数
     * 
     * @return 退款单号
     */
    public static String generateRefundNo() {
        return "REF" + generateOrderNo();
    }

    /**
     * 生成用户ID
     * 格式：U + 13位时间戳 + 3位随机数
     * 
     * @return 用户ID
     */
    public static String generateUserId() {
        long timestamp = System.currentTimeMillis();
        int randomSuffix = RANDOM.nextInt(1000);
        return "U" + timestamp + String.format("%03d", randomSuffix);
    }

    /**
     * 生成活动ID
     * 格式：A + yyyyMMddHHmmss + 4位随机数
     * 
     * @return 活动ID
     */
    public static String generateActivityId() {
        String timestamp = LocalDateTime.now().format(DATE_TIME_FORMATTER);
        String randomSuffix = String.format("%04d", RANDOM.nextInt(10000));
        return "A" + timestamp + randomSuffix;
    }

    /**
     * 生成圈子ID
     * 格式：C + yyyyMMddHHmmss + 4位随机数
     * 
     * @return 圈子ID
     */
    public static String generateCircleId() {
        String timestamp = LocalDateTime.now().format(DATE_TIME_FORMATTER);
        String randomSuffix = String.format("%04d", RANDOM.nextInt(10000));
        return "C" + timestamp + randomSuffix;
    }

    /**
     * 生成随机数字字符串
     * 
     * @param length 长度
     * @return 随机数字字符串
     */
    public static String generateRandomNumber(int length) {
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < length; i++) {
            sb.append(RANDOM.nextInt(10));
        }
        return sb.toString();
    }

    /**
     * 生成验证码
     * 
     * @param length 验证码长度
     * @return 验证码
     */
    public static String generateVerifyCode(int length) {
        return generateRandomNumber(length);
    }

    /**
     * 生成6位数字验证码
     * 
     * @return 6位验证码
     */
    public static String generateSixDigitCode() {
        return generateVerifyCode(6);
    }

    /**
     * 生成4位数字验证码
     * 
     * @return 4位验证码
     */
    public static String generateFourDigitCode() {
        return generateVerifyCode(4);
    }
} 